// 只负责登录权限的判断

// 导入 router 对象
import router from '@/router/index.js'
// 导入 store
import store from '@/store/index.js'
// 导入进度条相关的文件
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'


// 定义一个白名单
const WHITE_LIST = ['/login', '/404']

// 添加导航守卫
// 前置守卫
router.beforeEach(async (to, from, next) => {
  // to：要跳转到的路由页面
  // from：从哪个路由页面来的
  // next：回调函数，如果执行，继续向下执行
  // 开启进度条
  NProgress.start()
  // 得到 token
  const token = store.state.user.token
  // 判断是否存在 token
  if (!token) {
    // 不存在：判断请求的路由页面是否在白名单中存在
    // 得到要跳转到的路由路径
    const path = to.path
    // 判断路径是否存在白名单中
    if (WHITE_LIST.includes(path)) {
      // 在白名单中
      return next()
    } else {
      // 不在白名单中， 将访问页面的路径携带在 login 路径中
      return next(`/login?_redirect=${path}`)
    }
  } else {
    // 存在
    // 得到要跳转的页面
    const path = to.path
    // 判断路径是否是登录
    if (path === '/login') {
      // 手动关闭进度条
      NProgress.done()
      // 是登录：直接跳转到主页
      return next('/')
    } else {
      // 不是登录：
      // 得到用户名称
      const username = store.getters.username
      // 判断是否存在用户信息
      if (!username) {
        // 不存在：
        // 发送请求获取用户信息
        await store.dispatch('user/getUserInfo')
      }
      // 通过放行
      return next()
      // 以下是冗余写法
      // if (username) {
      //   // 通过放行
      //   return next()
      // } else {
      //   // 不存在：
      //   // 发送请求获取用户信息
      //   await store.dispatch('user/getUserInfo')
      //   // 通过放行
      //   return next()
      // }
    }
  }
})
// 后置守卫
router.afterEach((to, from) => {
  // to：要跳转到的路由页面
  // from：从哪个路由页面来的
  NProgress.done()
})
